<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
//     function foo () {
//   console.log(this.a)
// };
// var obj = { a: 1, foo };
// var a = 2;
// var foo2 = obj.foo;
// var obj2 = { a: 3, foo2: obj.foo }

// obj.foo();
// foo2();
// obj2.foo2();

// 第二题
// function foo () {
//   console.log(this.a)
// }
// function doFoo (fn) {
//   console.log(this)
//   fn()
// }
// var obj = { a: 1, foo }
// var a = 2
// doFoo(obj.foo)


// 三
// function foo () {
//   console.log(this.a)
// }
// function doFoo (fn) {
//   console.log(this)
//   fn()
// }
// var obj = { a: 1, foo }
// var a = 2
// var obj2 = { a: 3, doFoo }

// obj2.doFoo(obj.foo)

// 四
// function foo () {
//   console.log(this.a)
//   return function () {
//     console.log(this.a)
//   }
// }
// var obj = { a: 1 }
// var a = 2

// foo()
// foo.call(obj)
// foo().call(obj)

// 五
// var obj = {
//   a: 'obj',
//   foo: function () {
//     console.log('foo:', this.a)
//     return function () {
//       console.log('inner:', this.a)
//     }
//   }
// }
// var a = 'window'
// var obj2 = { a: 'obj2' }

// obj.foo()()
// obj.foo.call(obj2)()
// obj.foo().call(obj2)


// 六
// var obj = {
//   a: 1,
//   foo: function (b) {
//     b = b || this.a
//     return function (c) {
//       console.log(this.a + b + c)
//     }
//   }
// }
// var a = 2
// var obj2 = { a: 3 }

// obj.foo(a).call(obj2, 1)
// obj.foo.call(obj2)(1)

  </script>
</body>
</html>